package entity;

import com.simple.orm.agreement.annotation.Protocol;
import com.simple.orm.agreement.manager.impl.ProtocolManager;
import com.simple.orm.agreement.process.impl.AutoReadProcess;
import com.simple.orm.agreement.process.impl.AutoWriteProcess;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;

public class Demo {

    public static void main(String[] args) {
        // 注册协议的实体类型，在Spring boot项目中，可以使用Spring容器代理自动化实现，非Spring项目，可以使用反射工具实现自动化注入
        // Android项目可以借助DexFile实现自动化注入
        ProtocolManager.getInstance().register(TestEntity.class.getDeclaredAnnotation(Protocol.class).value(), TestEntity.class);
        // 测试用实体对象
        TestEntity testEntity = new TestEntity();
        testEntity.setsByte((byte) 0);
        testEntity.setbByte((byte) 1);
        testEntity.setsShort((short) 2);
        testEntity.setbShort((short) 3);
        testEntity.setsChar('4');
        testEntity.setbChar('5');
        testEntity.setsInt(6);
        testEntity.setbInt(7);
        testEntity.setsLong(8);
        testEntity.setbLong(9L);
        testEntity.setsFloat(10f);
        testEntity.setbFloat(11f);
        testEntity.setsDouble(12);
        testEntity.setbDouble(13.0);
        testEntity.setsBoolean(false);
        testEntity.setbBoolean(true);
        testEntity.setsString("测试字符串");
        testEntity.setLocalDateTime(LocalDateTime.now());
        testEntity.setDate(new Date());
        testEntity.setData(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
        try {
            // 序列化对象，序列化的目的就是便于对象在IO中传递，可以是本机交换，也可以是跨本机交换
            byte[] bytes = AutoWriteProcess.writeTo(testEntity, describe -> System.out.printf("序列化协议：%s%n", describe));
            // 反序列化对象，反序列化的目的是将IO中的数据，转换为java可以直接操作的对象，方便在程序中，直接操作
            TestEntity entity = AutoReadProcess.readData(bytes, describe -> System.out.printf("反序列化协议：%s%n", describe), true);
            // 输出饭序列化后的对象
            System.out.println(entity);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
